package com.nine.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.nine.entity.Product;
import com.nine.entity.ProductCondition;
import com.nine.service.ProductService;

@Controller
public class ProductController {
	@Autowired
	private ProductService productService;
	
	/**
	 * 获取所有商品信息(带分页)
	 * @param limit 分页大小
	 * @param page 当前页码
	 * @return 返回数据
	 */
	@ResponseBody
	@RequestMapping("showproduct.do")
	public Map<String,Object> getAllProduct(Integer limit, Integer page) {
		//一、手写分页功能
		//List<Product> list = productService.getAllProduct(limit, page);
		//Integer count = productService.getProductCount();
		
		//二、利用mybatis时的分页功能
		//limit表示页大小，page表示页码
		//初始判断page为空则指定页码为1
		//page=page==null?1:page;
		
		//1.启用分页
		PageHelper.startPage(page, limit); //传页码，页大小
		
		//2.查询
		//执行查询修改sql，自动添加limit进行分页
		List<Product> list = productService.getAllProduct();
				
		//3.获取分页后的相关信息
		PageInfo<Product> pageInfo=new PageInfo<Product>(list);
		Integer count = (int) pageInfo.getTotal();
		
		//layui对返回数据的json格式要求
		Map<String,Object> resultMap = new HashMap<String, Object>();
		resultMap.put("code", 0);
		resultMap.put("msg", "");
		resultMap.put("count", count);
		resultMap.put("data", list);
		return resultMap;
	}
	
	/**
	 * 根据商品名称查询商品信息（带分页，支持模糊查询）
	 * @param limit 分页大小
	 * @param page 当前页码
	 * @param keyword 关键词
	 * @param keytype 搜索条件
	 * @return 返回数据
	 */
	@ResponseBody
	@RequestMapping("getproductbykey.do")
	public Map<String,Object> getProductByKeyword(Integer limit, Integer page,String keyword,String keytype) {
		//1.启用分页
		PageHelper.startPage(page, limit); //传页码，页大小
		
		//2.查询
		//执行查询修改sql，自动添加limit进行分页
		ProductCondition condition=new ProductCondition();
		condition.setKeytype(keytype);
		condition.setKeyword(keyword);
		List<Product> list = productService.getProductByCondition(condition);
				
		//3.获取分页后的相关信息
		PageInfo<Product> pageInfo=new PageInfo<Product>(list);
		Integer count = (int) pageInfo.getTotal();
		
		//layui对返回数据的json格式要求
		Map<String,Object> resultMap = new HashMap<String, Object>();
		resultMap.put("code", 0);
		resultMap.put("msg", "");
		resultMap.put("count", count);
		resultMap.put("data", list);
		return resultMap;
	}
	
	/**
	 * 根据商品编号查询商品信息
	 * @param pid 商品编号
	 * @return 返回操作状态码和商品数据
	 */
	@ResponseBody
	@RequestMapping("getproductbypid.do")
	public Map<String, Object> getProductByPid(String pid) {
		Product product = productService.getProduct(pid);
		Integer code = product==null?0:1;
		Map<String,Object> resultMap = new HashMap<String, Object>();
		resultMap.put("code", code);
		resultMap.put("data", product);
		return resultMap;
	}
	
	/**
	 * 添加商品
	 * @param product 商品实体
	 * @return 返回操作状态码
	 */
	@ResponseBody
	@RequestMapping("addproduct.do")
	public Map<String, Object> addProduct(@RequestBody Product product) {
		Integer code = -1;
		code = productService.addProduct(product);
		Map<String,Object> resultMap = new HashMap<String, Object>();
		if(code>=1) {
			resultMap.put("code", 1);
			resultMap.put("msg", "操作成功");
		}else {
			resultMap.put("code", code);
			resultMap.put("msg", "操作失败");
		}
		return resultMap;
	}
	
	/**
	 * 修改商品信息
	 * @param product 商品实体
	 * @return 返回操作状态码
	 */
	@ResponseBody
	@RequestMapping("updateproduct.do")
	public Map<String, Object> updateProduct(@RequestBody Product product) {
		Integer code = -1;
		code = productService.updateProduct(product);
		Map<String,Object> resultMap = new HashMap<String, Object>();
		if(code>=1) {
			resultMap.put("code", 1);
			resultMap.put("msg", "操作成功");
		}else {
			resultMap.put("code", code);
			resultMap.put("msg", "操作失败");
		}
		return resultMap;
	}
	
	/**
	 * 删除商品
	 * @param pid 商品编号
	 * @return 返回操作状态码
	 */
	@ResponseBody
	@RequestMapping("deleteproduct.do")
	public Map<String, Object> deleteProduct(String pid) {
		Integer code = -1; 
		code = productService.deleteProductBypid(pid);
		Map<String,Object> resultMap = new HashMap<String, Object>();
		if(code>=1) {
			resultMap.put("code", 1);
			resultMap.put("msg", "操作成功");
		}else {
			resultMap.put("code", code);
			resultMap.put("msg", "操作失败");
		}
		return resultMap;
	}
	
	/**
	 * 删除商品
	 * 支持单条和多条操作
	 * @param pids 商品编号(用,隔开)
	 * @return 返回操作状态码
	 */
	@ResponseBody
	@RequestMapping("deletemoreproduct.do")
	public Map<String, Object> deleteMoreProduct(String pids) {
		String[] pid = pids.split(",");
		
		Integer code = -1; 
		code=productService.deleteMoreProduct(pid);
		Map<String,Object> resultMap = new HashMap<String, Object>();
		if(code>=1) {
			resultMap.put("code", 1);
			resultMap.put("msg", "操作成功");
		}else {
			resultMap.put("code", code);
			resultMap.put("msg", "操作失败");
		}
		return resultMap;
	}
	
}
